/**
 * @type {mn}
 * обертка для основных js методов проекта
 */
var mn = (function ($) {
    var instancePopover = false;

    return {
        deleteThing : function (objectId, typeId, el) {
            $.get('/ajax/deletedigest', {"object_id" : objectId, "type_id" : typeId}, function (data) {
                if (data.result == 'ok') {
                    el.remove();
                    mn.notify('success', {text: "Задача удалена из дайджеста"});
                    modal.close();
                }
            });
        },
        addThing : function (objectId, typeId, el) {
            $.post('/ajax/addtodigest', {"object_id" : objectId, "type_id" : typeId}, function (data) {
                if (data.result == 'ok') {
                    mn.notify('success', {text: "Задача добавлена в дайджест"});
                    modal.close();
                }
            });
        },
        notify : function (type, options) {
            //TODO сделать в зависимости от типа подсветку нотифая
            $.pnotify(options);
        },
        /**
         * у элемента по клику на который открывается popover должен быть обязательно параметр id
         */
        popover : function (el, html, options) {

            if (instancePopover) {
                instancePopover.popover('destroy');

                if (instancePopover.attr('id') == $(el).attr('id')) {
                    instancePopover = false;
                    return instancePopover;
                }
            }

            var defaultOptions = {
                content: html,
                "html": true
            };

            $.extend(defaultOptions, options);
            instancePopover = $(el);
            instancePopover.popover(defaultOptions);
            instancePopover.popover('show');
            return true;
        },
        addNotes : function () {
            mn.createNote();
        },
        createNote: function () {
            $.post('/ajax/createnote', {}, function (data) {
                if (data.result == 'ok') {
                    mn.getForm(data.id);
                }
            });
        },
        getForm : function (id) {
            $.get('/ajax/getform',{"id": id, "type": 'note'}, function (data) {
                modal.open(data.html, {"title": "Редактировать заметку"});
                return null;
            });
        },
        saveNote : function () {
            var formObj = $('#form-notes'),
                title   = formObj.find('#note-title'),
                id      = formObj.find('#note-id'),
                type    = formObj.find('#note-type');

            $.get('/ajax/savenote/', {"id": id.val(), "title": title.val(), "type": type.val()}, function (data) {
                switch (data.result) {
                    case 'ok':
                        mn.notify('success', {text: "Запись обновлена"});
                        modal.close();
                        break;
                    case 'error':
                        break;
                }
            });
        },
        deleteNote : function (id, el) {
            if (!id) {
                return;
            }

            $.post('/ajax/deletenote', {"note_id" : id}, function (data) {
                if (data.result == 'ok') {
                    mn.notify('success', {text: "Задача удалена"});
                    $(el).parent().remove();
                    modal.close();
                }
            });

        }
    }
})(jQuery);


//TODO аяксовые переходы между страницами
var nav = function () {
    return {
//        loadPage: function (element, callback) {
//            return false;
//        }
    }
}();

/**
 * Объект отвечает за работу модальных окон. Он должен инититься при каждом вызове и по закрытию должен удаляться
 *
 * @type {}
 */
var modal = (function () {
    var container,
        footer,
        blockTitle,
        content,
        chancelBtn,
        confirmBtn,
        title,
        isOpen = false,
        defaultCustomCallbacks = {
            onConfirm: function () {},
            onOpen   : function () {},
            onClose  : function () {},
            onChancel: function () {}
        },
        customCallbacks = defaultCustomCallbacks,
        m = this;

    m.destroy = function () {
        footer.hide();
        confirmBtn.text('');
        chancelBtn.text('');
        blockTitle.text('');
        content.html('');
        customCallbacks = defaultCustomCallbacks;
        chancelBtn.unbind('click');
        confirmBtn.unbind('click');
        container.unbind('hide');
        container.unbind('show');
        container  =  {};
        footer     = {};
        blockTitle = {};
        content    = {};
        chancelBtn = {};
        confirmBtn = {};
        isOpen = false;
    };
    m.init = function (html, options) {
        container  = $('#modal');
        footer     = $('.modal-footer');
        blockTitle = $('#modal-title');
        content    = $('#modal-body');
        chancelBtn = $('#modal-chancel');
        confirmBtn = $('#modal-confirm');
        options = options || {};

        if (options.buttons) {
            confirmBtn.text(options.buttons.confirm);
            chancelBtn.text(options.buttons.chancel);
            footer.show();

            chancelBtn.bind('click', function () {
                m.onChancel();
            });

            confirmBtn.bind('click', function () {
                m.onConfirm();
            });
        }

        if (options.onConfirm) {
            customCallbacks.onConfirm = options.onConfirm;
        }

        if (options.onChancel) {
            customCallbacks.onChancel = options.onChancel;
        }

        title = options.title || 'Заголовок Окна';
        blockTitle.text(title);

        if (html) {
            content.html(html);
        }
        container.bind('show', function (){
            m.onOpen();
        });

        container.bind('hide', function (){
            m.onClose();
        });

        container.modal();
        isOpen = true;

        if (container.find('.redactor_box').length !== 0) {
            container.addClass('with_redactor');
        }
    };

    m.onOpen = function () {
        customCallbacks.onOpen();
    };

    m.onClose = function () {
        customCallbacks.onClose();
        m.destroy();
    };

    m.onConfirm = function () {
        customCallbacks.onConfirm();
        container.modal('hide');
    };

    m.onChancel = function () {
        customCallbacks.onChancel();
        container.modal('hide');
    };

    return {
        confirm : function (html, options) {
            if (!options.buttons) {
                $.extend(options, {"buttons": {confirm:'Да', chancel: "Отмена"}});
            }

            m.init(html, options);
        },
        open: function (html, options) {
            m.init(html, options);
        },
        isOpen: function () {
            return isOpen;
        },
        close: function () {
            if (isOpen) {
                container.modal('hide');
            }
        }
    }
})();

$(document).ready(function () {
    $('#myCarousel').carousel();
    $('.well').hover(function () {
        $(this).find('.post-action').animate({opacity:1}, 800);
    },function () {
        $(this).find('.post-action').animate({opacity:0.1}, 200);
    });
    $('.task').hover(function () {
        $(this).find('.post-action').animate({opacity:1}, 800);
    },function () {
        $(this).find('.post-action').animate({opacity:0.1}, 200);
    });
});